package com.powergisol.core.processer;

import com.powergisol.gis.geom.GeoLineString;
import com.powergisol.gis.geom.GeoPolygon;
import com.powergisol.core.math.Dot;

import java.util.List;

public interface SectionProcesser {

    /**
     * 切面与其它面的交点,模型的每个层有上下两个面,两个面都为三角形,且顶点的X Y坐标都相同,
     * 最终的问题是转换成三角形三条边与面的相交关系,求得上下
     * @param section
     * @param polygons
     * @return
     */
    List<GeoPolygon> createSection(GeoPolygon section, List<GeoPolygon> polygons);





    List<Dot> getIntersectPoint(GeoPolygon section, GeoPolygon polygon);


    /**
     * 最终用的切线的方式是因为我们的切面是有范围的,必须用绘制的切线来判断相交的点是否在在切面以内
     * 如果面是任意的面可以通过各个点的差乘来判断是否在点内,也可以用来判断任意三个点是否逆时针排序,
     * 我们这里因为是竖直的切面,所以只需要判断绘制的切线的投影是否包含了交点的投影
     * @param lineString
     * @param polygon
     * @param height
     * @return
     */
    List<Dot> getIntersectPoint(GeoLineString lineString, GeoPolygon polygon,double height);


    /**
     * 模型开挖用的方法
     * @param section
     * @param polygon
     * @param height
     * @return
     */
    List<Dot> getIntersectPoint(GeoPolygon section, GeoPolygon polygon,double height);


}
